package com.example.controller;

//总结：每一个数据库的表对应唯一的一套，从xml——接口——service——controller形成了一个四件套，把它的增删改查对应起来

import com.example.common.Result;
import com.example.entity.Admin;
import com.example.service.AdminService;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController //只要你启动web端就要写这个
@RequestMapping("/admin")//和getmapping对应区分一下，不要写错了。这就是说我这个类里面我所有的前缀都有个叫admin
public class AdminController {
    //2.引入service
    @Resource
    private AdminService adminService;

    //新增数据
    @PostMapping("/add")//postman上发送post请求localhost:9090/admin/add
    public Result add(@RequestBody Admin admin){ //@RequestBody把前端传过来的json字符串给它映射成java对象
        adminService.add(admin);
        return Result.success();//新增数据不需要返回值
    }

    //更新数据
    @PutMapping("/update")
    public Result update(@RequestBody Admin admin){ //同样是@RequestBody把前端传过来的json字符串给它映射成java对象
        adminService.update(admin);
        return Result.success();
    }

    //删除单个数据
    @DeleteMapping("/deleteById/{id}")//删除有路径参数
    public Result deleteById(@PathVariable Integer id){ //***@RequestBody传对象，@PathVariable传单个数据
        adminService.deleteById(id);
        return Result.success();
    }

    //批量删除数据
    @DeleteMapping("/deleteBatch")
    public Result deleteBatch(@RequestBody List<Integer> ids){ //***@RequestBody传对象，@PathVariable传单个数据
        adminService.deleteBatch(ids);
        return Result.success();
    }

    //查询所有admin数据
    @GetMapping("/selectAll")  //最后是admin加selectAll这两个拼接在一起 —— /admin/selectAll
    public Result selectAll(Admin admin){
        //1.拜托service帮我查嘛
        List<Admin> list= adminService.selectAll(admin);
        //在？定义selectAll，然后需要返回一个List类型，发现没有admin类，再定义一个emploee类，创建一个entity包来定义这样的实体类
        //创建后List<Admin> list，注意return只能返回Result类型。
        //没创建selectAll？它帮你创建你去service里写就行了
        return Result.success(list);
    }

    //基于注解查询单个admin数据 web端输入格式：localhost:9090/admin/selectById/1/101 这里有失误，如果多个传参基于注解的sql语句需要改
    @GetMapping("/selectById/{id}")
    public Result selectById(@PathVariable Integer id){ //新注解@PathVariable
        Admin admin= adminService.selectById(id);
        return Result.success(admin);
    }

    //分页查询
    @GetMapping("/selectPage")//这个Admin admin是做前端查询功能回来重新设置的，目的：让entity包Admin类里所有属性作为它的参数
    public Result selectPage(Admin admin,
                            @RequestParam(defaultValue = "1") Integer pageNum,
                            @RequestParam(defaultValue="8") Integer pageSize){//两个参数，每页多少个pageSize和当前页数pageNum，记得设置默认值
        PageInfo<Admin> pageInfo= adminService.selectPage(admin,pageNum,pageSize);
        return Result.success(pageInfo);
    }

}
